<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends CommonController {
    public function index(){
        $model = M('User'); 
        $rows = $model->select(); 
        $this->assign('rows', $rows);
        $this->display();

    }
    public function add(){
        if (IS_POST) {
            //过滤数据
            $data = I('post.');
            //设置自动验证规则 模型类文件中
            //设置自动完成规则 模型类文件中
            $model = D('User');

            //自动创建数据
            $resArr = $model->create($data); 

            if($resArr === false || empty($resArr)){
                $errMsg = $model->getError();
                $this->error($errMsg ? $errMsg : '未知错误');
            }
            
            if($model->add()){
                $this->success('添加成功!');
            }else{
                $this->error($model->getError());
            }
        }else{
            $this->display('edit');
        }
    }
    public function edit(){
        if (IS_POST) {
            //过滤数据
            $data = I('post.');
            $model = D('User'); 
            //设置自动验证规则 模型类文件中
            //设置自动完成规则 模型类文件中

            //自动创建数据
            $resArr = $model->create($data);
            if($resArr === false || empty($resArr)){
                $errMsg = $model->getError();
                $this->error($errMsg ? $errMsg : '未知错误');
            }
             //动态修改数据  在更新时如果为空就忽略(已经在模型中配置自动完善) 如果有值就加密（模型中不能在进行配置，所以只能在此处动态完善）
            if(isset($model->userpwd) && !empty($model->userpwd)){
                $model->userpwd = md5($model->userpwd); 
            }
            if($model->save()){
                $this->success('更新成功');
            }else{
                $this->error($model->getError());
            }
        }else{
            $id = I('get.id');
            $model = M('User');
            $row = $model->find($id);

            $this->assign('row', $row);
            $this->display('edit');
        }
    }
    public function delDo(){
        $id = I('get.id');
        $model = M('User');

        if ($model->delete($id)) {
            $this->success('删除成功');
        }else{
            $this->error($model->getError());
        }
    }
    public function selectGroup(){
        if (IS_POST) {
            $uid = I('post.uid');
            $old = I('post.oldgids');
            $new = I('post.newgids');
            
            $intersect = array_intersect($old, $new);//取交集
            if(empty($intersect)){//旧数据全取消 ：会没有交集影响到$delete 和 $add  (另一种情况是 全是交集,数据没变，我们不用考虑,因为不影响获取$delete 和 $add)
                $delete = $old;
                $add   = $new;

            }else{
                //对old取补集得到已删数据
                $delete = array_diff($old, $intersect);//旧数据全保留，会没有要删除的 导致$delete 为空，但是判断时依然返回true ?
                //对new取补集得到新增数据
                $add = array_diff($new, $intersect);
            }

            //处理状态标志
            if(isset($delete) && !empty($delete)){
                foreach ($delete as $groupid){
                    $model = M('Groupaccess');
                    $data = array('uid'=> $uid,'group_id'=>$groupid);
                    if( !$model->where($data)->delete() ){ 
                        $this->error($model->getError());
                    }
                }
                //$this->success('删除成功',U('User/index'));
            }
            if(isset($add) && !empty($add)){
                foreach ($add as $groupid){
                    $model = M('Groupaccess');
                    $data = array('uid'=> $uid,'group_id'=>$groupid);
                    
                    if( !$model->add($data) ){//为什么status为0的用户组id不能被添加?  因为已经被添加过，但是刷去列表时却加上了条件status=1导致，已经被添加的数据没有被勾选。这是由于条件不一致导致的错误。 从数据库中抓取全部列表，和 已选中列表除了是否选中这个唯一的条件以外其他条件都应该保持一致。 
                        //拦截错误
                        $this->error($model->getError());
                    }
                }
                //$this->success('添加成功',U('User/index'));
            }
            $this->success('处理成功',U('User/index'));

        }else{
            $uid = I('get.id'); 

            //获取所有组
            $groups = M('Usergroup')->where(array('status'=>1))->select();

            //获取所有用户所属组id 可以用关联查询
            $auth_config = C('AUTH_CONFIG');
            $auth_group_access = $auth_config['AUTH_GROUP_ACCESS'];
            $auth_group = $auth_config['AUTH_GROUP'];
            $user_groups = M()//Array ( [0] => Array ( [id] => 2), [1] => Array ( [id] => 3) )  
            ->table($auth_group_access . ' a')
            ->where("a.uid='$uid' and g.status='1'")
            ->join($auth_group." g on a.group_id=g.id")
            ->field('id')
            ->select();
            foreach ( $user_groups as $key => $value ) {
                $user_group_ids[] = $value['id'];
            }
            //统一分配数据
            $this->assign('uid',$uid);
            $this->assign('rows',$groups); 
            //print_r($user_group_ids);
            $this->assign('ugids',$user_group_ids);

            $this->display();
        }

    }
}
